package br.com.esporte.view.infra.generic;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import br.com.esporte.facade.Fachada;
import br.com.esporte.model.Usuario;
import br.com.esporte.view.infra.context.ServiceBean;
import br.com.esporte.view.infra.session.SessionEsporte;

/**
 * 
 * @author Milton Domingues
 *
 */
public abstract class Pagina extends WebPage implements IPagina{

	private Pagina paginaRetorno;
	private PageParameters parametros;

	public Pagina() {
		this(null, null);
	}

	public Pagina(PageParameters parametros) {
		this(null, parametros);
	}

	public Pagina(Pagina paginaRetorno) {
		this(paginaRetorno, null);
	}

	public Pagina(Pagina paginaRetorno, PageParameters parametros) {
		setParametros(parametros);
		setPaginaRetorno(paginaRetorno);
	}

	public Fachada getFachada() {
		return (Fachada) ServiceBean.getInstance().getBean(Fachada.class);
	}

	/**
	 * Metodo para obter a pagina de retorno do fluxo.
	 */
	@Override
	public Pagina getPaginaRetorno() {
		return paginaRetorno;
	}

	public PageParameters getParametros() {
		return parametros;
	}

	@Override
	public SessionEsporte getSession() {
		return (SessionEsporte) super.getSession();
	}

	public Usuario getUsuarioLogado() {
		if(getSession().getUsuario() == null){
			getSession().setUsuario(getFachada().buscarUsuario(1L));
		}
		return getSession().getUsuario();
	}

	/**
	 * Metodo abstrato para montagem da pagina.
	 */
	@Override
	public abstract void montarPagina();

	/**
	 * Metodo para setar a pagina de retorno do fluxo.
	 * 
	 * @param pagina
	 */
	@Override
	public void setPaginaRetorno(Pagina pagina) {
		paginaRetorno = pagina;
	}

	public void setParametros(PageParameters parametros) {
		this.parametros = parametros;
	}

	public void setUsuarioLogado(Usuario usuario) {
		getSession().setUsuario(usuario);
	}

}
